[MINIOS] Fix to use new event-channel API properly.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 15 Sep 2006 10:07:25 +0000 (11:07 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 15 Sep 2006 10:07:25 +0000 (11:07 +0100)
Signed-off-by: Mark Williamson <mark.williamson@cl.cam.ac.uk>
extras/mini-os/events.c
extras/mini-os/include/events.h
extras/mini-os/include/x86/x86_32/hypercall-x86_32.h

index 57e835225df36a28d01d973f25bae40c96127103..e05f68d83dbb3d0f053910223362c79a3d288ebd 100644 (file)
@@ -88,19 +88,18 @@ void unbind_evtchn(evtchn_port_t port )
 
 int bind_virq(uint32_t virq, evtchn_handler_t handler, void *data)
 {
-       evtchn_op_t op;
+       evtchn_bind_virq_t op;
 
        /* Try to bind the virq to a port */
-       op.cmd = EVTCHNOP_bind_virq;
-       op.u.bind_virq.virq = virq;
-       op.u.bind_virq.vcpu = smp_processor_id();
+       op.virq = virq;
+       op.vcpu = smp_processor_id();
 
-       if ( HYPERVISOR_event_channel_op(&op) != 0 )
+       if ( HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, &op) != 0 )
        {
                printk("Failed to bind virtual IRQ %d\n", virq);
                return 1;
     }
-    bind_evtchn(op.u.bind_virq.port, handler, data);
+    bind_evtchn(op.port, handler, data);
        return 0;
 }
 
@@ -151,14 +150,13 @@ void default_handler(evtchn_port_t port, struct pt_regs *regs, void *ignore)
 int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler,
                                                 void *data, evtchn_port_t *port)
 {
-    evtchn_op_t op;
-    op.cmd = EVTCHNOP_alloc_unbound;
-    op.u.alloc_unbound.dom = DOMID_SELF;
-    op.u.alloc_unbound.remote_dom = pal;
-    int err = HYPERVISOR_event_channel_op(&op);
+    evtchn_alloc_unbound_t op;
+    op.dom = DOMID_SELF;
+    op.remote_dom = pal;
+    int err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op);
     if (err)
                return err;
-    *port = bind_evtchn(op.u.alloc_unbound.port, handler, data);
+    *port = bind_evtchn(op.port, handler, data);
     return err;
 }
 
@@ -169,14 +167,13 @@ int evtchn_bind_interdomain(domid_t pal, evtchn_port_t remote_port,
                            evtchn_handler_t handler, void *data,
                            evtchn_port_t *local_port)
 {
-    evtchn_op_t op;
-    op.cmd = EVTCHNOP_bind_interdomain;
-    op.u.bind_interdomain.remote_dom = pal;
-    op.u.bind_interdomain.remote_port = remote_port;
-    int err = HYPERVISOR_event_channel_op(&op);
+    evtchn_bind_interdomain_t op;
+    op.remote_dom = pal;
+    op.remote_port = remote_port;
+    int err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, &op);
     if (err)
                return err;
-       evtchn_port_t port = op.u.bind_interdomain.local_port;
+       evtchn_port_t port = op.local_port;
     clear_evtchn(port);              /* Without, handler gets invoked now! */
     *local_port = bind_evtchn(port, handler, data);
     return err;
index cdb6311845254f25b033a6163621053f9d84aa18..9adaf2971129f4c696c21d574bcf1d4130f78673 100644 (file)
@@ -39,10 +39,9 @@ int evtchn_bind_interdomain(domid_t pal, evtchn_port_t remote_port,
 
 static inline int notify_remote_via_evtchn(evtchn_port_t port)
 {
-    evtchn_op_t op;
-    op.cmd = EVTCHNOP_send;
-    op.u.send.port = port;
-    return HYPERVISOR_event_channel_op(&op);
+    evtchn_send_t op;
+    op.port = port;
+    return HYPERVISOR_event_channel_op(EVTCHNOP_send, &op);
 }
 
 
index 6556c4f7e2b8bf63c88f52b98808b55b9d5eb565..70e8997a86eca4939415368c4a87d890be6e52ba 100644 (file)
@@ -238,9 +238,9 @@ HYPERVISOR_update_va_mapping(
 
 static inline int
 HYPERVISOR_event_channel_op(
-       void *op)
+       int cmd, void *op)
 {
-       return _hypercall1(int, event_channel_op, op);
+       return _hypercall2(int, event_channel_op, cmd, op);
 }
 
 static inline int